如何處理 API 錯誤?
a. 錯誤檢測
狀態碼檢查:檢查 HTTP 響應狀態碼,以判斷請求是否成功。
響應內容解析:解析 API 返回的錯誤信息,例如錯誤訊息、錯誤代碼等。
b. 錯誤處理
重試機制:對於暫時性錯誤(如 502、503),可以實現自動重試機制。
用戶反饋:向用戶提供明確的錯誤訊息,說明問題並提供可能的解決方案。
備援方案:在主要 API 失敗時,使用備援服務或降級功能。
c. 錯誤記錄
日誌記錄:詳細記錄錯誤資訊,包括時間、錯誤代碼、請求參數等,以便後續調試。
監控與告警:設置監控系統,實時監控 API 錯誤率並在異常時發送告警。
d. 版本控制與兼容性
API 版本管理:保持 API 版本的穩定,避免頻繁變更導致的兼容性問題。
向後兼容性:在更新 API 時,盡量保持向後兼容,避免影響現有用戶。
常見的 API 錯誤代碼與解釋
以下是一些常見的 HTTP 狀態碼及其在 API 錯誤處理中的含義:
客戶端錯誤(4xx)
400 Bad Request(錯誤的請求)
原因:請求格式錯誤,參數缺失或無效。
處理:檢查並修正請求參數和格式。
401 Unauthorized(未授權)
原因:缺少有效的認證憑證(如 API 金鑰、Token)。
處理:確保提供正確的認證資訊,可能需要重新登錄或獲取新 Token。
403 Forbidden(禁止訪問)
原因:用戶無權訪問該資源,即使已經認證。
處理:檢查用戶權限,確保有權訪問該資源。
404 Not Found(未找到)
原因:請求的資源不存在。
處理:確認請求的 URL 和資源是否正確。
405 Method Not Allowed(方法不允許)
原因:使用了不支持的 HTTP 方法(如對某端點使用 POST 而只支持 GET)。
處理:檢查並使用正確的 HTTP 方法。
429 Too Many Requests(請求過多)
原因:超出 API 的速率限制。
處理:實施退避策略(如指數退避),並確保遵守 API 的速率限制政策。
服務器錯誤(5xx)
500 Internal Server Error(內部伺服器錯誤)
原因:服務器遇到未預期的錯誤。
處理:通常需要等待服務器恢復,並可聯繫 API 提供者。
502 Bad Gateway(錯誤的網關)
原因:作為網關或代理的服務器從上游服務器收到無效響應。
處理:重試請求,若問題持續,聯繫服務器管理員。
503 Service Unavailable(服務不可用)
原因:服務器暫時無法處理請求,可能因為過載或維護。
處理:實施重試機制,並在重試前等待一段時間。
504 Gateway Timeout(網關超時)
原因:作為網關或代理的服務器未能在預定時間內從上游服務器獲取響應。
處理:重試請求,檢查網絡連接或服務器狀態。
其他有用的狀態碼
如何在 Postman 中處理錯誤響應
查看響應狀態碼和內容
使用測試腳本自動檢測錯誤
Postman 支持在請求後運行 JavaScript 測試腳本,以自動化檢測和處理錯誤。
// 檢查狀態碼是否為 200
pm.test("狀態碼為 200", function () {
pm.response.to.have.status(200);
});
// 檢查響應體中是否包含特定錯誤訊息
pm.test("檢查錯誤訊息", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.error).to.eql("Invalid API Key");
});
使用環境變數和全局變數處理錯誤
可以利用 Postman 的環境變數和全局變數來動態處理錯誤,例如在遇到 401 Unauthorized 時,自動刷新 Token。
編寫測試腳本處理錯誤:
if (pm.response.code === 401) {
// 發送刷新 Token 的請求
pm.sendRequest({
url: 'https://api.example.com/refresh-token',
method: 'POST',
header: {
'Content-Type': 'application/json'
},
body: {
mode: 'raw',
raw: JSON.stringify({ refreshToken: pm.environment.get("refreshToken") })
}
}, function (err, res) {
if (res.code === 200) {
var newToken = res.json().token;
// 更新環境變數
pm.environment.set("token", newToken);
// 重新發送原始請求
postman.setNextRequest(pm.info.requestName);
} else {
console.log("刷新 Token 失敗");
}
});
}
使用集合級別的前置和後置腳本
在 Postman 集合中,可以設置前置(Pre-request)和後置(Tests)腳本,以在每個請求前後自動處理錯誤。例如,統一處理 500 錯誤,並記錄到日誌中。
在集合的「Tests」選項卡中,添加以下腳本:
if (pm.response.code >= 500) {
console.log("服務器錯誤:", pm.response.code, pm.response.text());
// 可選:發送通知或記錄到外部系統
}
2.運行集合測試:使用 Postman 的「Collection Runner」運行整個集合,所有的錯誤都會被自動處理和記錄。
使用 Postman 的自動化和集成工具
Postman 支持與 CI/CD 工具集成,如 Jenkins、GitLab CI 等,能夠在自動化測試流程中處理和報告 API 錯誤。
newman run your-collection.json -e your-environment.json
透過以上方法,可以有效地處理 API 錯誤,提升應用的穩定性和用戶體驗。無論是在開發階段還是運行階段,妥善的錯誤處理策略都是必不可少的。